package Principal;

import java.math.BigDecimal;
import java.util.List;

public class EventoMeioLivre extends Evento{

	public EventoMeioLivre(BigDecimal _tempoExecucao, Host _host, HistoriaSimulacao _historiaSimulacao, Estatistica _estatistica, List<Host> _hostsSistema) {
		super(_tempoExecucao, _host, _historiaSimulacao, _estatistica, _hostsSistema);		
	}

	@Override
	public void executar() {
		
		// Verifico se o modo verbose esta ativo para imprimir o evento na tela
		if(verbose){
			System.out.printf("Evento Meio Livre. Host: %d. Tempo: %s us.\n", getNumeroHost(), tempoExecucao.setScale(4, BigDecimal.ROUND_HALF_EVEN).toString());
		}
		
		// Indico que o meio esta livre, recupero o tempo da ultima transmissao para posterior caculo do tempo de espera
		host.setMeioLivre();
		host.setTempoUltimaTransmissaoSistema(tempoExecucao);
		
		if(getNumeroHost() == 1)
		{
			//System.out.printf("Host 1 meio livre. Tempo: %s us.\n", tempoExecucao.setScale(4, BigDecimal.ROUND_HALF_EVEN).toString());
			
			estatistica.finalMeioOcupado(host);
		}
		
		// Se o host estava escutando o meio
		if (host.isEscutandoMeio()){
			
			// Gero um evento de inicio de transmissao e indico que nao esta mais escutando o meio
			host.setNotEscutandoMeio(); 
			Evento inicioTx = new EventoInicioTransmissao(tempoExecucao, host, historiaSimulacao, estatistica, hostsSistema);
			historiaSimulacao.adicionarEvento(inicioTx);
		}		
	}

}
